﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 原题连接：https://leetcode.cn/problems/sort-array-by-parity/
/*
题目描述：
给你一个整数数组 nums，将 nums 中的的所有偶数元素移动到数组的前面，后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。

 

示例 1：
输入：nums = [3,1,2,4]
输出：[2,4,3,1]
解释：[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。

示例 2：
输入：nums = [0]
输出：[0]
 

提示：
1 <= nums.length <= 5000
0 <= nums[i] <= 5000
*/

// 开始解题：

// 方法1——双指针
int* sortArrayByParity(int* nums, int numsSize, int* returnSize) {
    assert(nums && returnSize);
    *returnSize = numsSize;
    int* temp = (int*)malloc(numsSize * sizeof(int));
    if (NULL == temp) {
        perror("malloc fail!\n");
        exit(-1);
    }
    int left = 0;
    int right = numsSize - 1;
    int i = 0;
    for (i = 0; i < numsSize; i++) {
        if (nums[i] % 2 == 0) {
            temp[left] = nums[i];
            left++;
        }
        else {
            temp[right] = nums[i];
            right--;
        }
    }
    return temp;
}